StepFunctionsでLambdaの指定日時実行をしてみる
こんにちは、CX事業本部の夏目です。
指定した日時に処理を走らせたくなることはよくあると思います。
LambdaにはCloudWatch Scheduleトリガーがあるので簡単に実装できそうですが、これは予め実行したい日時がわかっている場合にしか使えません。 つまり、システムの中で日時を指定して実行させたい、みたいな要件にはCloudWatch Scheduleトリガーは合いません。
しかし、Step FunctionsのWait
Stateを使用すると、簡単に実装できます。
Step Functionsとは?
AWS Step Functions
視覚的なワークフローを使用して分散アプリケーションを構築します。
https://aws.amazon.com/jp/step-functions/
端的に言うと、Lambdaなどの処理をフローチャートのような形で実行できるサービスです。
詳しくは下記投稿を見てもらった方がわかりやすいと思います。
Wait State
Wait
StateはStepFunctionsで使用できるStateの一つで、ステートマシンの実行を途中で待機させることができます。
例えば、下記Stateでは10秒ステートマシンの実行を待機します。
"wait_ten_seconds" : { "Type" : "Wait", "Seconds" : 10, "Next": "NextState" }
実はこのWait
Stateは待機時間を記述する方法の他に、指定した日時まで待機することもできます。
下記例では、UTC時間で2016年3月14日1時59分になるまで処理を待機します。
"wait_until" : { "Type": "Wait", "Timestamp": "2016-03-14T01:59:00Z", "Next": "NextState" }
上記例では実行したい日時を直接State定義に記載しましたが、Stateに渡されるイベントから日時を取得することもできます。
{ "expirydate": "2016-03-14T01:59:00Z" }
"wait_until" : { "Type": "Wait", "TimestampPath": "$.expirydate", "Next": "NextState" }
実行したい日時をイベントで渡すことで、それまで待機を行い好きなLambdaを実行することができます。
まとめ
Lambda単体では難しい、後からの指定日時実行ですがStepFunctionsを使うことで簡単に実装することができます。
使える局面は少ないかもしれないですが、活用してみてください。